Hibernate Transaction Management হল Hibernate এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ডেটাবেস ট্রানজেকশন পরিচালনা করতে সাহায্য করে। এটি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য অনুসরণ করে এবং ডেটাবেসে কার্যক্রমের নির্ভরযোগ্যতা ও সঠিকতা বজায় রাখে। Hibernate Transaction Management এর মাধ্যমে আপনি একাধিক ডেটাবেস অপারেশন একত্রে করতে পারেন এবং তা সফলভাবে বা ব্যর্থভাবে একসাথে পরিচালনা করতে পারবেন।
Hibernate-এর Transaction Management মূলত JPA (Java Persistence API) এবং JTA (Java Transaction API) এর উপর ভিত্তি করে কাজ করে, এবং Hibernate Session বা JDBC ট্রানজেকশন ব্যবহার করতে সাহায্য করে।
Hibernate ট্রানজেকশন ব্যবস্থাপনা মূলত Session.beginTransaction(), session.getTransaction() এবং session.getTransaction().commit() এর মাধ্যমে করা হয়।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateTransactionExample {
public static void main(String[] args) {
// Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class)
.buildSessionFactory();
// Create session
Session session = factory.getCurrentSession();
// Start a transaction
Transaction transaction = session.beginTransaction();
try {
// Create a new User object
User user = new User("John", "john@example.com");
// Save the User object
session.save(user);
// Commit the transaction (persisting changes to the database)
transaction.commit();
System.out.println("Transaction committed successfully.");
} catch (Exception e) {
// If any exception occurs, rollback the transaction
if (transaction != null) {
transaction.rollback();
System.out.println("Transaction rolled back.");
}
e.printStackTrace();
} finally {
session.close();
factory.close();
}
}
}
Hibernate-এ Transaction Management দুটি প্রধানভাবে ব্যবহৃত হয়:
Hibernate-এ সাধারণ JDBC transactions ব্যবহার করার জন্য Session API ব্যবহৃত হয়। এটা সাধারণত standalone applications এবং single-database applications এ ব্যবহৃত হয়।
JDBC Transaction Example:
session.beginTransaction();
session.saveOrUpdate(employee);
session.getTransaction().commit();
JTA (Java Transaction API) ব্যবহার করে, আপনি ট্রানজেকশন ম্যানেজার ব্যবহার করে multi-database বা distributed transactions পরিচালনা করতে পারেন।
JTA Transaction Example:
import javax.transaction.UserTransaction;
public class HibernateJTAExample {
@Resource
private UserTransaction userTransaction;
public void performTransaction() {
try {
userTransaction.begin();
// Perform various DB operations here
session.save(new Object());
userTransaction.commit();
} catch (Exception e) {
try {
userTransaction.rollback();
} catch (SystemException se) {
se.printStackTrace();
}
}
}
}
JTA সাধারণত Java EE containers (EJB, JBoss, etc.) এর সাথে ব্যবহৃত হয় এবং distributed systems এর জন্য ট্রানজেকশন ব্যবস্থাপনা সরবরাহ করে।
Hibernate Transaction Management হল একটি অত্যন্ত শক্তিশালী এবং কার্যকরী বৈশিষ্ট্য যা ডেটাবেসে ট্রানজেকশন পরিচালনা করার জন্য ব্যবহৃত হয়। Session.beginTransaction(), commit(), এবং rollback() পদ্ধতিগুলি ব্যবহার করে আপনি ডেটাবেস অপারেশন একত্রে পরিচালনা করতে পারেন এবং ACID properties বজায় রেখে আপনার ডেটাবেসের নিরাপত্তা এবং সঠিকতা নিশ্চিত করতে পারেন। JTA এবং JDBC ট্রানজেকশন ব্যবস্থাপনা ব্যবহারের মাধ্যমে Hibernate আরও উন্নত পারফরম্যান্স এবং ডিস্ট্রিবিউটেড সিস্টেমে কাজ করতে সক্ষম হয়।
Transaction Management হাইবারনেটের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা ডেটাবেসের সাথে কার্যকরীভাবে কাজ করতে সহায়ক। Transaction বলতে বোঝানো হয় এমন একটি ক্রিয়া যা একাধিক অপারেশনকে একটি একক ইউনিটে গ্রুপ করে, যাতে তাদের সফলভাবে শেষ হওয়া অথবা কোনো কারণে ব্যর্থ হলে সম্পূর্ণ প্রক্রিয়াটি রোলব্যাক করা যায়। Hibernate ডেটাবেসের ট্রানজ্যাকশন ম্যানেজমেন্ট সহজতর করতে বিভিন্ন পদ্ধতি প্রদান করে, যাতে ডেটাবেসের অপারেশন Atomic, Consistent, Isolated, এবং Durable (ACID গুণাবলী) থাকে।
Hibernate-এ Transaction Management মূলত JDBC ভিত্তিক এবং JTA (Java Transaction API) সমর্থন করে, যা ডিস্ট্রিবিউটেড ট্রানজ্যাকশন এবং মাল্টিপল ডেটাবেসের মধ্যে ট্রানজ্যাকশন পরিচালনা করতে সাহায্য করে।
Transaction হল একাধিক ডেটাবেস অপারেশন (যেমন Insert, Update, Delete) যা একত্রে সম্পন্ন হতে হবে অথবা সম্পূর্ণভাবে ব্যর্থ হতে হবে। ট্রানজ্যাকশন ব্যবস্থাপনা ডেটাবেসের ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী নিশ্চিত করতে সহায়ক। Hibernate-এ ট্রানজ্যাকশন ম্যানেজমেন্টের জন্য Session
এবং Transaction
ক্লাস ব্যবহৃত হয়।
Transaction
ক্লাস ডেটাবেস ট্রানজ্যাকশনকে নির্ধারণ এবং পরিচালনা করতে ব্যবহৃত হয়। এটি একটি Session
অবজেক্টের মাধ্যমে ডেটাবেসের পরিবর্তনগুলি ব্যাচ করা এবং নিশ্চিত করা হয়।session.beginTransaction()
মেথড ব্যবহার করা হয়।ধরা যাক আমাদের একটি Employee ক্লাস রয়েছে এবং আমরা এই ক্লাসে কিছু ডেটা Insert করতে চাই।
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double salary;
// Constructors, Getters, Setters
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class TransactionExample {
public static void main(String[] args) {
// Step 1: Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Step 2: Create session
Session session = factory.getCurrentSession();
// Step 3: Start transaction
Transaction transaction = null;
try {
transaction = session.beginTransaction();
// Step 4: Create a new Employee object
Employee newEmployee = new Employee("John Doe", 50000);
// Step 5: Save the employee object
session.save(newEmployee);
// Step 6: Commit the transaction
transaction.commit();
System.out.println("Employee saved with ID: " + newEmployee.getId());
} catch (Exception e) {
if (transaction != null) {
// Step 7: If an error occurs, rollback the transaction
transaction.rollback();
}
e.printStackTrace();
} finally {
factory.close();
}
}
}
session.getCurrentSession()
ব্যবহার করে একটি Session তৈরি করা হয়।session.beginTransaction()
মেথডের মাধ্যমে একটি ট্রানজ্যাকশন শুরু করা হয়।session.save(newEmployee)
এর মাধ্যমে ডেটাবেসে সেভ করা হয়।transaction.commit()
ব্যবহার করে পরিবর্তনগুলো ডেটাবেসে কমিট করা হয়।transaction.rollback()
মেথডটি ব্যবহার করা হয় যাতে ডেটাবেসের পরিবর্তনগুলি বাতিল করা হয়।Hibernate এ দুই ধরনের ট্রানজ্যাকশন ব্যবস্থাপনা আছে:
Hibernate JDBC ট্রানজ্যাকশন ম্যানেজমেন্ট ব্যবহার করে। এর মধ্যে Session অবজেক্টের মাধ্যমে commit এবং rollback অপারেশন ম্যানেজ করা হয়। এটি সাধারণত non-distributed environments বা single-database applications-এ ব্যবহৃত হয়।
JTA ট্রানজ্যাকশন ব্যবস্থাপনা distributed transactions এর জন্য ব্যবহৃত হয়, যেখানে একাধিক ডেটাবেস বা সিস্টেমের মধ্যে ট্রানজ্যাকশন পরিচালনা করা হয়। Hibernate JTA সমর্থন করে, যাতে আপনি একাধিক ডেটাবেসে বা ট্রানজ্যাকশনের মধ্যে যোগাযোগ করতে পারেন।
UserTransaction userTransaction = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
try {
userTransaction.begin();
session.save(newEmployee);
userTransaction.commit();
} catch (Exception e) {
userTransaction.rollback();
}
commit()
এবং rollback()
সঠিকভাবে ব্যবহার করুন। commit()
শুধুমাত্র তখনই করা উচিত যখন সমস্ত অপারেশন সফল হয়, আর rollback()
ব্যবহার করুন যখন কোনো অপারেশন ব্যর্থ হয়।Hibernate-এ Transaction Management একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা ACID (Atomicity, Consistency, Isolation, Durability) প্রিন্সিপাল অনুসরণ করে ডেটাবেসের ট্রানজ্যাকশন নিশ্চিত করে। Hibernate এ Session
এবং Transaction
ব্যবহার করে আপনি সহজে ডেটাবেসের সাথে কার্যকরীভাবে যোগাযোগ করতে পারেন এবং নিরাপদ ট্রানজ্যাকশন পরিচালনা করতে পারেন। JDBC এবং JTA ভিত্তিক ট্রানজ্যাকশন ব্যবস্থাপনা দুটি প্রধান পদ্ধতি, যা আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুসারে ব্যবহার করা যেতে পারে।
Hibernate-এ Transaction Management হল একটি অত্যন্ত গুরুত্বপূর্ণ কৌশল, যা ডেটাবেস অপারেশনগুলিকে একটি একক ইউনিট হিসেবে পরিচালনা করে। এটি নিশ্চিত করে যে সমস্ত অপারেশন সফল হলে একযোগে কমিট করা হবে এবং যদি কোনো ত্রুটি ঘটে, তাহলে সমস্ত অপারেশন রোলব্যাক করা হবে। Hibernate Transaction Management সাধারণত JDBC ট্রানজেকশন ম্যানেজমেন্টের উপর ভিত্তি করে কাজ করে, কিন্তু Hibernate এটি সরল এবং আরো কার্যকরভাবে পরিচালনা করতে সহায়তা করে।
Hibernate-এর মাধ্যমে transaction management চালানো হয় Session
অবজেক্টের মাধ্যমে। Hibernate ট্রানজেকশনগুলোকে programmatic এবং declarative পদ্ধতিতে পরিচালনা করতে সক্ষম করে। সাধারণত Hibernate JDBC transaction অথবা JTA transaction সমর্থন করে, তবে JDBC transaction সবচেয়ে বেশি ব্যবহৃত হয়।
Hibernate এ transaction management করতে হলে নিম্নলিখিত মৌলিক ধাপগুলো অনুসরণ করা হয়:
Hibernate এ ট্রানজেকশন ব্যবস্থাপনা তিনটি প্রধান অংশে বিভক্ত:
এখানে আমরা JDBC Transaction Management এর মাধ্যমে Hibernate ট্রানজেকশন ম্যানেজমেন্ট দেখব।
<!-- hibernate.cfg.xml -->
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_example</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class TransactionExample {
public static void main(String[] args) {
// Hibernate configuration setup
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create a session
Session session = factory.getCurrentSession();
// Start a transaction
Transaction transaction = null;
try {
// Begin the transaction
transaction = session.beginTransaction();
// Create a new Employee object
Employee newEmployee = new Employee("John", "Doe", "Developer");
// Save the employee object
session.save(newEmployee);
// Commit the transaction
transaction.commit();
System.out.println("Employee saved successfully!");
} catch (Exception e) {
// If any exception occurs, roll back the transaction
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
} finally {
factory.close();
}
}
}
Session
অবজেক্ট ব্যবহার করে। এখানে session.beginTransaction()
দিয়ে ট্রানজেকশন শুরু করা হয়েছে।Transaction
অবজেক্টে সমস্ত ডেটাবেস অপারেশন একত্রিত করা হয়। যদি কোনো ত্রুটি হয়, তাহলে transaction.rollback()
ব্যবহার করে সমস্ত অপারেশন রোলব্যাক করা হয়।transaction.commit()
মেথড দ্বারা ট্রানজেকশনটি কমিট করা হয়, যার ফলে পরিবর্তনগুলি ডেটাবেসে সেভ হয়।session.beginTransaction()
বা session.getTransaction().begin()
এর মাধ্যমে ট্রানজেকশন শুরু হয়।session.save()
, session.update()
, session.delete()
।session.getTransaction().commit()
মেথডের মাধ্যমে ট্রানজেকশন সম্পন্ন করা হয় এবং সমস্ত পরিবর্তন ডেটাবেসে সেভ করা হয়।session.getTransaction().rollback()
দ্বারা সমস্ত পরিবর্তন বাতিল করা হয়, যাতে ডেটাবেস অপরিবর্তিত থাকে।Hibernate-এ Transaction Management একটি অত্যন্ত গুরুত্বপূর্ণ দিক, যা ডেটাবেসের মধ্যে সঠিক এবং নির্ভরযোগ্য ডেটা অপারেশন নিশ্চিত করে। Session
অবজেক্টের মাধ্যমে ট্রানজেকশন শুরু, কার্যকরী করা এবং রোলব্যাক/কমিট করা সহজ হয়। Hibernate এর ট্রানজেকশন ম্যানেজমেন্ট ডেটাবেসের একাধিক অপারেশনগুলো একটি একক ইউনিটে গ্রুপ করে, এবং সফল হলে একত্রে কমিট করা হয়, অন্যথায় রোলব্যাক হয়।
Hibernate-এ programmatic transaction management খুবই সাধারণ, তবে যখন Spring এর মতো ফ্রেমওয়ার্ক ব্যবহৃত হয়, তখন declarative transaction management ব্যবহার করে আরো উন্নত ট্রানজেকশন ম্যানেজমেন্ট করা যায়।
Hibernate-এ Transactional Methods ব্যবহারের মাধ্যমে আপনি ডাটাবেসের ট্রানজেকশন পরিচালনা করতে পারেন। Hibernate ট্রানজেকশন ম্যানেজমেন্ট সরাসরি Session
এবং Transaction
অবজেক্টের মাধ্যমে পরিচালিত হয়। এই প্রক্রিয়া কার্যকরভাবে commit এবং rollback পরিচালনা করে, যা ডাটাবেস অপারেশনগুলোর অ্যাটমিকতা, স্থিতিশীলতা এবং সম্পূর্ণতা নিশ্চিত করে।
Hibernate-এ ট্রানজেকশন হলো এক বা একাধিক ডাটাবেস অপারেশনের গ্রুপ, যা একযোগে সফলভাবে সম্পন্ন বা ব্যর্থ হতে পারে। এটি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য নিশ্চিত করে। Hibernate ট্রানজেকশন ম্যানেজমেন্টের জন্য Transaction
API প্রদান করে, যা একাধিক অপারেশনকে একত্রে কার্যকরী করতে সহায়ক।
প্রথমে Hibernate কনফিগারেশন ফাইলটি তৈরি করতে হবে যেখানে ডাটাবেসের সংযোগের তথ্য থাকবে।
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Show SQL -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mention annotated class -->
<mapping class="com.example.hibernate.Employee"/>
</session-factory>
</hibernate-configuration>
এখানে, hibernate.cfg.xml ফাইলে ডাটাবেস সংযোগ এবং Hibernate কনফিগারেশন দেওয়া হয়েছে। Employee
ক্লাসের জন্য একটি টেবিল তৈরি করা হবে।
এখানে একটি Employee
ক্লাস তৈরি করব যা Hibernate Entity হবে এবং ডাটাবেস টেবিলের সাথে সম্পর্কিত হবে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Constructors, Getters and Setters
public Employee() {}
public Employee(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
এখানে, @Entity
অ্যানোটেশন দ্বারা Employee
ক্লাসটি Hibernate Entity হিসেবে চিহ্নিত করা হয়েছে এবং @Id
এবং @GeneratedValue
অ্যানোটেশন ব্যবহার করে প্রাইমারি কী ফিল্ড তৈরি করা হয়েছে।
Hibernate-এ ট্রানজেকশন ব্যবস্থাপনা করার জন্য, আপনি Session
অবজেক্টের beginTransaction()
মেথড দিয়ে একটি ট্রানজেকশন শুরু করবেন, এবং commit()
অথবা rollback()
মেথড দিয়ে ট্রানজেকশন পরিচালনা করবেন।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class EmployeeDAO {
private SessionFactory sessionFactory;
public EmployeeDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void saveEmployee(Employee employee) {
// Start a session
Session session = sessionFactory.getCurrentSession();
// Begin transaction
Transaction transaction = session.beginTransaction();
try {
// Save the employee object
session.save(employee);
// Commit the transaction
transaction.commit();
System.out.println("Employee saved successfully");
} catch (Exception e) {
// If error occurs, rollback the transaction
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
}
}
}
এখানে:
session.save(employee)
: এটি Employee
অবজেক্টকে ডাটাবেসে সেভ করবে।transaction.commit()
: এটি সফলভাবে ডাটাবেসের পরিবর্তন সেভ করবে।transaction.rollback()
: যদি কোনো ত্রুটি ঘটে, তবে পরিবর্তনগুলো রিভার্ট করবে এবং ডাটাবেসের পূর্বাবস্থা ফিরে আসবে।এখন, আমরা MainApp
ক্লাসে Hibernate দিয়ে ডেটা সেভ করার এবং ট্রানজেকশন পরিচালনা করার উদাহরণ দেখাবো।
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class MainApp {
public static void main(String[] args) {
// Create session factory
SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create EmployeeDAO instance
EmployeeDAO employeeDAO = new EmployeeDAO(sessionFactory);
// Create Employee object
Employee newEmployee = new Employee("John Doe");
// Save the employee (Transaction will be handled inside DAO method)
employeeDAO.saveEmployee(newEmployee);
// Close the session factory
sessionFactory.close();
}
}
এখানে:
EmployeeDAO.saveEmployee(newEmployee)
মেথডে ট্রানজেকশন পরিচালনা করা হবে, যেখানে ডেটা সেভ করা হবে এবং ট্রানজেকশন সফলভাবে কমিট হবে বা কোনো ত্রুটির ক্ষেত্রে রোলব্যাক হবে।যদি আপনার Hibernate কনফিগারেশন সঠিকভাবে সেটআপ থাকে এবং ডাটাবেসে কোনো ত্রুটি না ঘটে, তাহলে আউটপুট হবে:
Hibernate: insert into Employee (name) values (?)
Employee saved successfully
এখানে, Hibernate: insert into Employee (name) values (?)
SQL স্টেটমেন্টটি Hibernate কনসোল আউটপুট হিসেবে দেখাবে, এবং Employee saved successfully একটি কনসোল মেসেজ থাকবে, যা নির্দেশ করে যে ট্রানজেকশন সফলভাবে সম্পন্ন হয়েছে।
commit()
এবং rollback()
মেথডের মাধ্যমে নিশ্চিত করে।Hibernate-এ Transactional Methods ব্যবহারের মাধ্যমে আপনি ডাটাবেসের একাধিক অপারেশনকে একটি ট্রানজেকশনে সম্পন্ন করতে পারেন, যা commit এবং rollback এর মাধ্যমে কার্যকরভাবে পরিচালিত হয়। এটি Atomicity এবং Consistency নিশ্চিত করে, এবং Hibernate ট্রানজেকশন ব্যবস্থাপনা সহজ করে তোলে। Hibernate-এর Session
এবং Transaction
ব্যবহার করে আপনি ডাটাবেস অপারেশনগুলো অ্যাটমিকভাবে এবং নিরাপদে সম্পন্ন করতে পারবেন।
Hibernate-এ Transaction Management হল ডেটাবেস ট্রানজেকশন পরিচালনার একটি অত্যন্ত গুরুত্বপূর্ণ অংশ। এটি নিশ্চিত করে যে সমস্ত ডেটাবেস অপারেশন সফলভাবে সম্পাদিত হচ্ছে এবং ডেটাবেসের অবস্থা সঠিকভাবে আপডেট হচ্ছে। Hibernate-এ দুটি প্রধান পদ্ধতিতে ট্রানজেকশন পরিচালনা করা যায়: Declarative Transaction Management এবং Programmatic Transaction Management।
Declarative transaction management-এ ট্রানজেকশন পরিচালনা করা হয় annotations বা XML configuration ব্যবহার করে। Spring framework এর মতো প্ল্যাটফর্মগুলি Declarative transaction management সরবরাহ করে, যেখানে আপনি সার্ভিস বা মেথডের জন্য ট্রানজেকশনটি কার্যকরী করতে @Transactional অ্যানোটেশন ব্যবহার করেন।
Programmatic transaction management-এ আপনি সরাসরি কোডের মাধ্যমে ট্রানজেকশন ম্যানেজ করেন। Hibernate এর Session
অবজেক্টের মাধ্যমে আপনি begin, commit, এবং rollback ট্রানজেকশন করতে পারেন।
এখানে Declarative এবং Programmatic Transaction Management সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।
Declarative Transaction Management-এ আপনি কোনো মেথড বা ক্লাসে transaction management কনফিগার করতে পারেন, যা annotations বা XML কনফিগারেশন ব্যবহার করে পরিচালিত হয়।
Spring Framework-এ @Transactional
অ্যানোটেশন ব্যবহৃত হয়। Hibernate বা JPA কনফিগারেশনের জন্য এই অ্যানোটেশনটি খুবই জনপ্রিয়।
@Transactional
in Springimport org.springframework.transaction.annotation.Transactional;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class EmployeeService {
private SessionFactory factory;
public EmployeeService() {
factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
}
@Transactional
public void addEmployee() {
Session session = factory.getCurrentSession();
session.beginTransaction();
// Create a new employee
Employee employee = new Employee("John", "Doe", "john.doe@example.com");
// Save the employee object
session.save(employee);
session.getTransaction().commit(); // Transaction is committed automatically
}
}
@Transactional
: এই অ্যানোটেশনটি ট্রানজেকশন প্রক্রিয়াকে স্বয়ংক্রিয়ভাবে পরিচালনা করে। Spring বা Hibernate এর মধ্যে একটি ট্রানজেকশন শুরু হয় এবং তার পরবর্তী সকল ডেটাবেস অপারেশন স্বয়ংক্রিয়ভাবে ট্রানজেকশনের অংশ হয়ে যায়।@Transactional
ব্যবহৃত হলে, ট্রানজেকশন সফল হলে কমিট হয়ে যায় এবং যদি কোনো এক্সসেপশন ঘটে তবে রোলব্যাক হয়। আপনি বিশেষভাবে rollbackFor
বা noRollbackFor
ব্যবহার করতে পারেন।এছাড়া আপনি XML কনফিগারেশনের মাধ্যমে ট্রানজেকশন পরিচালনা করতে পারেন:
<bean id="employeeService" class="com.example.EmployeeService"
autowire="byType">
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="transactionManager"/>
</bean>
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="addEmployee" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
এখানে, XML কনফিগারেশনের মাধ্যমে Declarative transaction management সেটআপ করা হয়, যা ট্রানজেকশনকে নির্দিষ্ট মেথড বা ক্লাসে প্রযোজ্য করে।
Programmatic Transaction Management-এ, আপনি আপনার কোডের মধ্যে ডাইরেক্টলি ট্রানজেকশন শুরু এবং সমাপ্ত করেন। এই পদ্ধতিটি আরো বেশি কাস্টমাইজেশন এবং ফ্লেক্সিবিলিটি প্রদান করে, কারণ আপনি নিজের প্রয়োজন অনুসারে ট্রানজেকশন কন্ট্রোল করতে পারেন।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class EmployeeService {
private SessionFactory factory;
public EmployeeService() {
factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
}
public void addEmployee() {
// Obtain current session
Session session = factory.getCurrentSession();
// Begin transaction
Transaction transaction = session.beginTransaction();
try {
// Create a new employee
Employee employee = new Employee("Jane", "Doe", "jane.doe@example.com");
// Save the employee
session.save(employee);
// Commit transaction
transaction.commit(); // If everything goes well, commit the transaction
} catch (Exception e) {
transaction.rollback(); // If there is any exception, rollback the transaction
e.printStackTrace();
} finally {
session.close(); // Close the session
}
}
}
session.beginTransaction()
: ট্রানজেকশন শুরু হয়।transaction.commit()
: ট্রানজেকশন কমিট হয়।transaction.rollback()
: যদি কোনো সমস্যা হয়, তবে ট্রানজেকশন রোলব্যাক করা হয়।এটি Programmatic Transaction Management-এর সাধারণ উদাহরণ যেখানে ট্রানজেকশন ম্যানেজমেন্টের পুরো প্রক্রিয়া কোডের মাধ্যমে পরিচালিত হয়।
Aspect | Declarative Transaction Management | Programmatic Transaction Management |
---|---|---|
Configuration | ব্যবহারকারী @Transactional অ্যানোটেশন অথবা XML কনফিগারেশন ব্যবহার করে ট্রানজেকশন পরিচালনা করেন। | কোডের মধ্যে beginTransaction() , commit() , এবং rollback() ব্যবহৃত হয়। |
Flexibility | কম ফ্লেক্সিবল, কারণ এটি একটি নির্দিষ্ট টেমপ্লেট বা কনফিগারেশন অনুসরণ করে। | খুবই ফ্লেক্সিবল, কারণ আপনি নিজেই ট্রানজেকশন কন্ট্রোল করতে পারেন। |
Complexity | সহজ এবং আরও কমপ্যাক্ট। কম কোড রাইটিং প্রয়োজন। | বেশি কোড রাইটিং প্রয়োজন এবং ট্রানজেকশন কন্ট্রোলের জন্য কোডে বেশি লজিক থাকে। |
Usage | সাধারণত Spring Framework বা JEE environments এ ব্যবহৃত হয়। | স্বতন্ত্র Hibernate অ্যাপ্লিকেশনে বা কাস্টম ট্রানজেকশন ম্যানেজমেন্টের ক্ষেত্রে ব্যবহৃত হয়। |
Error Handling | রোলব্যাক এবং কমিট স্বয়ংক্রিয়ভাবে ঘটে যদি কোনো এক্সসেপশন হয়। | আপনাকে এক্সসেপশন হ্যান্ডলিং কোড যুক্ত করতে হবে। |
Hibernate-এ Declarative এবং Programmatic Transaction Management দুইটি গুরুত্বপূর্ণ ট্রানজেকশন পরিচালনার কৌশল।
@Transactional
ব্যবহার করা যায়।যেখানে আপনার অ্যাপ্লিকেশন প্রয়োজন অনুসারে ট্রানজেকশন পরিচালনা করতে চায়, সেখানেই আপনি এই দুটি পদ্ধতির মধ্যে একটি নির্বাচন করতে পারেন।
Read more